<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<!-- 浅拷贝是两个对象他们之间有共同的属性和方法。需要注意的是：浅拷贝对象中的对象属性和数组属性只是赋值其存储地址，
			深拷贝是循环遍历对象中的键值对，然后在新对象中开辟新的地址存储属性值。
		 -->
		<!--Object.assign 
		 用于合并对象，将一个或多个源对象的属性复制到目标对象中，如果目标对象已经存在相同的属性，则会进行覆盖
		 Object.assign是浅拷贝，只复制对象的属性值，不复制对象的引用，如果源对象的属性值是一个对象或数组，复制后的属性值仍然是引用同一个对象或数组
		 -->

		<script>
			// //浅拷贝:拷贝就是复制,就相当于把一个对象中的所有的内容,复制一份给另一个对象,
			// // 第一种：
			// var obj1 = {
			// 	age: 10,
			// 	sex: "男",
			// 	car: ["奔驰", "宝马", "特斯拉", "奥拓"],
			// 	obj: {
			// 		name: '小美',
			// 		home: ['上海', '北京']
			// 	}
			// };
			// //另一个对象
			// var obj2 = {};

			// //写一个函数,作用:把一个对象的属性复制到另一个对象中,浅拷贝
			// //把a对象中的所有的属性复制到对象b中
			// function shallowCopy(obj, targetObj) {
			// 	for (let key in obj) {
			// 		targetObj[key] = obj[key];
			// 	}
			// }
			// shallowCopy(obj1, obj2);
			// console.dir(obj2); //开始的时候这个对象是空对象
			// console.dir(obj1); //有属性
			// obj1.car.push("奥迪");
			// obj1.obj.home.push('上海', '北京', '深圳1');
			// console.log(obj2);

			// // 第二种
			// //直接复制,或者说,就是把一个对象的地址给了另一个对象,他们指向相同,两个对象之间有共同的属性或者方法,都可以使用
			// var obj3 = obj1;
			// console.dir(obj3);
			// obj3.age = 11;
			// obj3.car = [];
			// console.log(obj1)
			// console.log(obj1 === obj3)





			// //深拷贝:拷贝还是复制,深:把一个对象中所有的属性或者方法,一个一个的找到.并且在另一个对象中开辟相应的空间,一个一个的存储到另一个对象中
			// var obj1 = {
			// 	age: 10,
			// 	sex: "男",
			// 	car: ["奔驰", "宝马", "特斯拉", "奥拓"],
			// 	dog: {
			// 		name: "大黄",
			// 		age: 5,
			// 		color: "黑白色"
			// 	}
			// };

			// var obj2 = {}; //空对象
			// //通过函数实现,把对象a中的所有的数据深拷贝到对象b中
			// // use recursion
			// function deepCopy(obj, targetObj) {
			// 	for (let key in obj) {
			// 		let item = obj[key];
			// 		if (item instanceof Array) { //if array
			// 			targetObj[key] = [];
			// 			deepCopy(item, targetObj[key]);
			// 		} else if (item instanceof Object) { //if object
			// 			targetObj[key] = {};
			// 			deepCopy(item, targetObj[key]);
			// 		} else { //normal attribute
			// 			targetObj[key] = obj[key];
			// 		}
			// 	}
			// }
			// deepCopy(obj1, obj2);
			// console.dir(obj1);
			// console.dir(obj2);
			
			
			
			
			// //Object.assign 使用  合并到target数组中，对象和数组复制的是值的存储地址。
			// const target = { a: 1 }
			// const source1 = { b: 2 }
			// const source2 = { c: 3, d: 4,e:[1,2,3,4]}
			
			// const merged = Object.assign(target, source1, source2)
			
			// console.log(merged);
			// merged.e.push(11);
			// // console.log(target === merged)
			// console.log(target)
			// console.log(source2)
			
			
			
			
			// var obj1 = {};
			// var obj2 = {};
			// console.log(obj1 == obj2)
		</script>
	</body>
</html>